Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java (Programmiersprache)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java_(Programmiersprache)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.tmh.player.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_Programmiersprache rootpage-Java_Programmiersprache skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java (Programmiersprache)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox toccolours toptextcells" style="font-size:90%; margin-top:0; width:21em;">

<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:larger;">Java
</th></tr>
<tr>
<td colspan="2" class="notheme" style="text-align:center; background-color:#f8f9fa;">
</td></tr>


<tr>
<th colspan="2" class="hintergrundfarbe5" style="font-size:105%; text-align:center;">Basisdaten
</th></tr>
<tr>
<td><b><a href="Programmierparadigma" title="Programmierparadigma">Paradigmen</a>:</b>
</td>
<td><a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">Objektorientierte Programmiersprache</a>
</td></tr>

<tr>
<td><b>Erscheinungsjahr:</b>
</td>
<td><span class="wikidata-content">1995</span>
</td></tr>

<tr>
<td><b>Designer:</b>
</td>
<td><span class="wikidata-content"><a href="James_Gosling" title="James Gosling">James Gosling</a>, <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></span>
</td></tr>

<tr>
<td><b>Entwickler:</b>
</td>
<td><span class="wikidata-content"><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="Oracle" title="Oracle">Oracle</a><sup id="cite_ref-_b5582dc99bf534f6_1-0" class="reference"><a href="#cite_note-_b5582dc99bf534f6-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>, <a href="James_Gosling" title="James Gosling">James Gosling</a></span>
</td></tr>
<tr>
<td><b>Aktuelle&nbsp;<a href="Version_(Software)" title="Version (Software)">Version</a></b>
</td>
<td class="wikidata-content" style="white-space:nowrap;">Java SE 25<sup id="cite_ref-_90999754ca016858_2-0" class="reference"><a href="#cite_note-_90999754ca016858-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>&nbsp;<small>(16. September 2025)</small>
</td></tr>


<tr>
<td><b><a href="Typisierung_(Informatik)" title="Typisierung (Informatik)">Typisierung</a>:</b>
</td>
<td><a href="Starke_Typisierung" title="Starke Typisierung">stark</a>, <a href="Statische_Typisierung" title="Statische Typisierung">statisch</a>
</td></tr>







<tr>
<td><b>Beeinflusst von:</b>
</td>
<td><span class="wikidata-content"><a href="C%2B%2B" title="C++">C++</a>, <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, <a href="Ada_(Programmiersprache)" title="Ada (Programmiersprache)">Ada</a>, <a href="Simula-67" class="mw-redirect" title="Simula-67">Simula-67</a>, <a href="Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a>, <a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="Object_Pascal" title="Object Pascal">Object Pascal</a>, <a href="Oberon_(Programmiersprache)" title="Oberon (Programmiersprache)">Oberon</a>, <a href="Eiffel_(Programmiersprache)" title="Eiffel (Programmiersprache)">Eiffel</a>, <a href="Modula-3" title="Modula-3">Modula-3</a>, <a href="Mesa_(Programmiersprache)" title="Mesa (Programmiersprache)">Mesa (Programmiersprache)</a>, <a href="Simula" title="Simula">Simula</a>, <a href="C-Sharp" title="C-Sharp">C#</a>, <a href="UCSD_Pascal" title="UCSD Pascal">UCSD Pascal</a></span>
</td></tr>
<tr>
<td><b>Beeinflusste:</b>
</td>
<td><a href="Groovy" title="Groovy">Groovy</a>, <a href="Clojure" title="Clojure">Clojure</a>, <a href="C-Sharp" title="C-Sharp">C#</a>, <a href="Scala_(Programmiersprache)" title="Scala (Programmiersprache)">Scala</a>, <a href="Vala_(Programmiersprache)" title="Vala (Programmiersprache)">Vala</a>, <a href="ActionScript" title="ActionScript">ActionScript</a>, <a href="Seed7" title="Seed7">Seed7</a>, <a href="Kotlin_(Programmiersprache)" title="Kotlin (Programmiersprache)">Kotlin</a>, <a href="JavaScript" title="JavaScript">JavaScript</a>
</td></tr>
<tr>
<td><b><a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a>:</b>
</td>
<td><a href="Plattformunabh%C3%A4ngigkeit" title="Plattformunabhängigkeit">plattformunabhängig</a>
</td></tr>

<tr>
<td><b><a href="Lizenz" title="Lizenz">Lizenz</a>:</b>
</td>
<td><span class="wikidata-content"><a href="GNU_General_Public_License" title="GNU General Public License">GNU General Public License</a><sup id="cite_ref-_42b71f7a64a76d21_3-0" class="reference"><a href="#cite_note-_42b71f7a64a76d21-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></span>
</td></tr>


<tr>
<td colspan="2" class="hintergrundfarbe5" style="text-align:center;"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/">www.oracle.com/java/</a>
</td></tr></tbody></table>
<p><span style="white-space:nowrap"><b>Java</b> ist eine <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierte</a> <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a></span> und eine eingetragene <a href="Marke_(Recht)" title="Marke (Recht)">Marke</a> des Unternehmens <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, welches 2010 von <a href="Oracle" title="Oracle">Oracle</a> <a href="Unternehmenskauf" title="Unternehmenskauf">übernommen</a> wurde. Die Programmiersprache ist ein Bestandteil der <a href="Java-Technologie" title="Java-Technologie">Java-Technologie</a> – diese besteht grundsätzlich aus dem Java-<a href="Programmierwerkzeug" title="Programmierwerkzeug">Entwicklungswerkzeug</a> (<a href="Java_Development_Kit" title="Java Development Kit">JDK</a>) zum Erstellen von Java-Programmen und der <a href="Java-Laufzeitumgebung" title="Java-Laufzeitumgebung">Java-Laufzeitumgebung</a> (JRE) zu deren Ausführung. Die Laufzeitumgebung selbst umfasst die virtuelle Maschine (<a href="Java_Virtual_Machine" title="Java Virtual Machine">JVM</a>) und die mitgelieferten <a href="Programmbibliothek" title="Programmbibliothek">Bibliotheken</a>. Java als Programmiersprache sollte nicht mit der Java-Technologie gleichgesetzt werden; Java-Laufzeitumgebungen führen <a href="Bytecode" title="Bytecode">Bytecode</a> aus, der sowohl aus der Programmiersprache Java als auch aus anderen Programmiersprachen wie <a href="Groovy" title="Groovy">Groovy</a>, <a href="Kotlin_(Programmiersprache)" title="Kotlin (Programmiersprache)">Kotlin</a> und <a href="Scala_(Programmiersprache)" title="Scala (Programmiersprache)">Scala</a> kompiliert werden kann. Im Prinzip könnte jede Programmiersprache als Grundlage für Java-Bytecode genutzt werden, für die meisten existieren aber keine passenden Bytecode-<a href="Compiler" title="Compiler">Compiler</a>.
</p><p>Die Programmiersprache <i>Java</i> dient innerhalb der Java-Technologie vor allem zum Formulieren von Programmen. Diese liegen zunächst als reiner, menschenverständlicher <a href="Text" title="Text">Text</a> vor, dem sogenannten <a href="Quellcode" class="mw-redirect" title="Quellcode">Quellcode</a>. Dieser Quellcode ist nicht direkt ausführbar; erst der Java-Compiler, der Teil des Entwicklungswerkzeugs ist, übersetzt ihn in den maschinenverständlichen Java-Bytecode. Die Maschine, die diesen Bytecode ausführt, ist jedoch typischerweise virtuell – das heißt, der Code wird meist nicht direkt durch <a href="Hardware" title="Hardware">Hardware</a>, wie z.&nbsp;B. einen <a href="Mikroprozessor" title="Mikroprozessor">Mikroprozessor</a>, ausgeführt, sondern durch entsprechende <a href="Software" title="Software">Software</a> auf der Zielplattform.
</p><p>Zweck dieser Virtualisierung ist <a href="Plattformunabh%C3%A4ngigkeit" title="Plattformunabhängigkeit">Plattformunabhängigkeit</a>: Das Programm soll ohne weitere Änderung auf jeder Rechnerarchitektur laufen können, sofern dort eine passende Laufzeitumgebung <a href="Installation_(Software)" title="Installation (Software)">installiert</a> ist. Oracle selbst bietet Laufzeitumgebungen für die Betriebssysteme <a href="Linux" title="Linux">Linux</a>, <a href="MacOS" title="MacOS">macOS</a> und <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> an. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform <a href="Zertifizierung" title="Zertifizierung">zertifizieren</a>. Auch in Autos, HiFi-Anlagen und anderen elektronischen Geräten wird Java verwendet.
</p><p>Um die Ausführungsgeschwindigkeit zu erhöhen, werden Konzepte wie die <a href="Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">Just-in-time-Kompilierung</a> und die <a href="Hotspot-Optimierung" class="mw-redirect" title="Hotspot-Optimierung">Hotspot-Optimierung</a> verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann die JVM den Bytecode also <a href="Interpreter" title="Interpreter">interpretieren</a>, ihn bei Bedarf jedoch auch <a href="Kompilierung" class="mw-redirect" title="Kompilierung">kompilieren</a> und <a href="Dynamische_Optimierung" title="Dynamische Optimierung">optimieren</a>.
</p><p>Java ist eine der populärsten Programmiersprachen. In dem seit 2001 veröffentlichten <a href="TIOBE-Index" title="TIOBE-Index">TIOBE-Index</a> lag Java bis 2020, konkurrierend mit <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, stets auf den ersten beiden Plätzen. Seit 2021 belegt jedoch <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a> den ersten Platz dieses Rankings – gefolgt von C, C++ und Java. Der Anteil von Java sank von ca. 25&nbsp;% im Jahr 2001 auf etwa 10&nbsp;% (2021–2025).<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Nach dem RedMonk-Programmiersprachenindex liegt Java seit 2020 bzw. 2021 hinter <a href="JavaScript" title="JavaScript">JavaScript</a> und <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>

<div class="mw-heading mw-heading2"><h2 id="Grundkonzepte">Grundkonzepte</h2></div>
<p>Der Entwurf der Programmiersprache Java strebte hauptsächlich fünf Ziele an:<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Sie soll eine <a href="Einfachheit" title="Einfachheit">einfache</a>, <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierte</a>, <a href="Rechnernetz" title="Rechnernetz">verteilte</a> und <a href="Prinzip_der_geringsten_%C3%9Cberraschung" class="mw-redirect" title="Prinzip der geringsten Überraschung">vertraute</a> <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> sein.</li>
<li>Sie soll <a href="Robustheit" title="Robustheit">robust</a> und <a href="Sicherheit" title="Sicherheit">sicher</a> sein.</li>
<li>Sie soll <a href="Rechnerarchitektur" title="Rechnerarchitektur">architekturneutral</a> und <a href="Plattformunabh%C3%A4ngigkeit" title="Plattformunabhängigkeit">portabel</a> sein.</li>
<li>Sie soll sehr <a href="Rechenleistung" title="Rechenleistung">leistungsfähig</a> sein.</li>
<li>Sie soll <a href="Interpreter" title="Interpreter">interpretierbar</a>, <a href="Parallele_Programmierung" title="Parallele Programmierung">parallelisierbar</a> und dynamisch sein.</li></ul>
<dl><dt>Einfachheit</dt>
<dd>Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie <a href="C%2B%2B" title="C++">C++</a> oder <a href="C-Sharp" title="C-Sharp">C#</a> einfach, da es einen reduzierten Sprachumfang besitzt und beispielsweise <a href="%C3%9Cberladen#Operatorüberladung" title="Überladen">Operatorüberladung</a> und <a href="Mehrfachvererbung" title="Mehrfachvererbung">Mehrfachvererbung</a> nicht unterstützt.</dd>
<dt>Objektorientierung</dt>
<dd>Java gehört zu den <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten Programmiersprachen</a>.</dd>
<dt>Verteilt</dt>
<dd>Eine Reihe einfacher Möglichkeiten für Netzwerkkommunikation, von <a href="Transmission_Control_Protocol/Internet_Protocol" title="Transmission Control Protocol/Internet Protocol">TCP/IP</a>-Protokollen über <a href="Remote_Method_Invocation" title="Remote Method Invocation">Remote Method Invocation</a> bis zu <a href="Webservice" title="Webservice">Webservices</a> werden vor allem über Javas <a href="Klassenbibliothek" class="mw-redirect" title="Klassenbibliothek">Klassenbibliothek</a> angeboten; die Sprache Java selbst beinhaltet keine direkte Unterstützung für verteilte Ausführung.</dd>
<dt>Vertrautheit</dt>
<dd>Wegen der syntaktischen Nähe zu C++, der ursprünglichen Ähnlichkeit der Klassenbibliothek zu <a href="Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a>-Klassenbibliotheken und der Verwendung von <a href="Entwurfsmuster" title="Entwurfsmuster">Entwurfsmustern</a> in der Klassenbibliothek ist der Umstieg auf Java für erfahrene Programmierer vergleichsweise einfach.</dd>
<dt>Robustheit</dt>
<dd>Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter Systemfehler; Beispiele dafür sind die starke Typisierung, <a href="Garbage_Collection" title="Garbage Collection">Garbage Collection</a>, Ausnahmebehandlung sowie Verzicht auf Zeigerarithmetik.</dd>
<dt>Sicherheit</dt>
<dd>Zur Verbesserung der Sicherheit stehen Konzepte wie der Class-Loader, der die sichere Zuführung von Klasseninformationen zur Java <a href="Virtual_Machine" class="mw-redirect" title="Virtual Machine">Virtual Machine</a> steuert, und Security-Manager, die sicherstellen, dass nur Zugriff auf Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.</dd>
<dt>Architekturneutralität</dt>
<dd>Java wurde so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen Computerhardware läuft, unabhängig von ihrem Prozessor oder anderen <a href="Hardware" title="Hardware">Hardwarebestandteilen</a>.</dd>
<dt>Portabilität</dt>
<dd>Zusätzlich zur Architekturneutralität ist Java portabel. Das heißt, dass elementare Datentypen sowohl in ihrer Größe und internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert sind. Beispielsweise ist ein <code>float</code> immer ein <a href="IEEE_754" title="IEEE 754">IEEE 754 Float</a> von 32&nbsp;Bit Länge. Dasselbe gilt beispielsweise auch für die Klassenbibliothek, mit deren Hilfe man eine vom Betriebssystem unabhängige <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">GUI</a> erzeugen kann.</dd>
<dt>Leistungsfähigkeit</dt>
<dd>Java hat aufgrund der <a href="Dynamische_Optimierung" title="Dynamische Optimierung">Optimierungsmöglichkeit</a> zur <a href="Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> das Potenzial, eine bessere <a href="Rechenleistung" title="Rechenleistung">Performance</a> als auf <a href="%C3%9Cbersetzungszeit" title="Übersetzungszeit">Compilezeit</a>-Optimierungen begrenzte Sprachen (C++ etc.) zu erreichen. Dem entgegen steht der <a href="Overhead_(EDV)" title="Overhead (EDV)">Overhead</a> durch die Java-<a href="Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitumgebung</a>, sodass die Leistungsfähigkeit von beispielsweise C++-Programmen in einigen Kontexten übertroffen,<sup id="cite_ref-Schulz_8-0" class="reference"><a href="#cite_note-Schulz-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Speed2_9-0" class="reference"><a href="#cite_note-Speed2-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> in anderen aber nicht erreicht wird.<sup id="cite_ref-hundt2011_10-0" class="reference"><a href="#cite_note-hundt2011-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> Um Leistungsfähigkeit zu gewährleisten, kann in der Java Virtual Machine (JVM) die Performance gemessen werden.<sup id="cite_ref-Performance1_11-0" class="reference"><a href="#cite_note-Performance1-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></dd>
<dt>Interpretierbarkeit</dt>
<dd>Java wird in maschinenunabhängigen <a href="Bytecode" title="Bytecode">Bytecode</a> kompiliert, dieser wiederum kann auf der Zielplattform interpretiert werden. Die <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> interpretiert Java-Bytecode, bevor sie ihn aus Performancegründen kompiliert und optimiert.</dd>
<dt>Parallelisierbarkeit</dt>
<dd>Java unterstützt <a href="Multithreading" title="Multithreading">Multithreading</a>, also den parallelen Ablauf von eigenständigen Programmabschnitten. Dazu bietet die Sprache selbst die Schlüsselwörter <code>synchronized</code> und <code>volatile</code> – Konstrukte, die das „Monitor &amp; Condition Variable Paradigma“ von <a href="Tony_Hoare" title="Tony Hoare">C.&nbsp;A.&nbsp;R. Hoare</a><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> unterstützen. Die Klassenbibliothek enthält weitere Unterstützungen für parallele Programmierung mit Threads. Moderne JVMs bilden einen Java-<a href="Thread_(Informatik)" title="Thread (Informatik)">Thread</a> auf <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a>-Threads ab und profitieren somit von <a href="Prozessor" title="Prozessor">Prozessoren</a> mit mehreren <a href="Prozessor#Hauptprozessor,_CPU_und_Prozessorkern" title="Prozessor">Rechenkernen</a>.</dd>
<dt>Dynamisch</dt>
<dd>Java ist so aufgebaut, dass es sich an dynamisch ändernde Rahmenbedingungen anpassen lässt. Da die Module erst zur Laufzeit gelinkt werden, können beispielsweise Teile der Software (etwa Bibliotheken) neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu müssen. Interfaces können als Basis für die Kommunikation zwischen zwei Modulen eingesetzt werden; die eigentliche Implementierung kann aber dynamisch und beispielsweise auch während der Laufzeit geändert werden.</dd></dl>
<div class="mw-heading mw-heading3"><h3 id="Objektorientierung">Objektorientierung</h3></div>

<p>Die Grundidee der <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten Programmierung</a> ist, Daten und zugehörige Funktionen möglichst eng in einem sogenannten Objekt zusammenzufassen und nach außen hin zu kapseln (<a href="Abstraktion_(Informatik)" title="Abstraktion (Informatik)">Abstraktion</a>). Die Absicht dahinter ist, große Softwareprojekte einfacher zu <a href="Wartbarkeit" title="Wartbarkeit">verwalten</a> und die Qualität der Software zu erhöhen. Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der <a href="Wiederverwendbarkeit" title="Wiederverwendbarkeit">Wiederverwendbarkeit</a> von Softwaremodulen.
</p><p>Ein neuer Aspekt von Java gegenüber den objektorientierten Programmiersprachen C++ und <a href="Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a> ist die explizite Unterscheidung zwischen <a href="Schnittstelle_(Objektorientierung)" title="Schnittstelle (Objektorientierung)">Schnittstellen</a> und <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a>, die durch entsprechende Schlüsselwörter <code>interface</code> und <code>class</code> ausgedrückt wird. Java unterstützt kein Erben von mehreren unabhängigen <a href="Basisklasse" title="Basisklasse">Basisklassen</a> (sogenannte „Mehrfachvererbung“ wie in C++ oder <a href="Eiffel_(Programmiersprache)" title="Eiffel (Programmiersprache)">Eiffel</a>), wohl aber das Implementieren einer beliebigen Zahl von Schnittstellen, womit sich viele der entsprechenden Probleme ebenfalls lösen lassen. Dabei werden <a href="Signatur_(Programmierung)" title="Signatur (Programmierung)">Methodensignaturen</a> und Standardimplementierungen von <a href="Objektorientierte_Programmierung#Methoden" title="Objektorientierte Programmierung">Methoden</a> an die abgeleiteten Klassen weitergegeben, jedoch keine <a href="Attribut_(Programmierung)" title="Attribut (Programmierung)">Attribute</a>.
</p><p>Java ist nicht vollständig objektorientiert, da die <a href="Datentyp" title="Datentyp">Grunddatentypen</a> (<a href="Integer_(Datentyp)" title="Integer (Datentyp)">int</a>, <a href="Boolean" title="Boolean">boolean</a> usw.) keine Objekte sind (siehe auch unter <a href="Java-Syntax#Primitive_Datentypen" title="Java-Syntax">Java-Syntax</a>). Sie werden allerdings ab Java 5 bei Bedarf automatisch und für den Programmierer transparent mittels <a href="Autoboxing" class="mw-redirect" title="Autoboxing">Autoboxing</a> in die entsprechenden Objekttypen und umgekehrt umgewandelt.<sup id="cite_ref-Autoboxing_13-0" class="reference"><a href="#cite_note-Autoboxing-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Beispiel">Beispiel</h4></div>
<div class="mw-heading mw-heading5"><h5 id="Source-Code">Source-Code</h5></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="cm">/**</span>
<span class="linenos" data-line="2"></span><span class="cm"> * Diese Klasse ist eine allgemeine Klasse für jedes beliebige Tier und bietet</span>
<span class="linenos" data-line="3"></span><span class="cm"> * Methoden an, die alle Tiere gemeinsam haben.</span>
<span class="linenos" data-line="4"></span><span class="cm"> */</span>
<span class="linenos" data-line="5"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Tier</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="6"></span><span class="w"> </span><span class="cm">/**</span>
<span class="linenos" data-line="7"></span><span class="cm"> * Diese Methode lässt das Tier kommunizieren. Die Unterklassen dieser</span>
<span class="linenos" data-line="8"></span><span class="cm"> * Klasse können diese Methode überschreiben und eine passende</span>
<span class="linenos" data-line="9"></span><span class="cm"> * Implementierung für das jeweilige Tier anbieten.</span>
<span class="linenos" data-line="10"></span><span class="cm"> */</span>
<span class="linenos" data-line="11"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">kommuniziere</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="12"></span><span class="w"> </span><span class="c1">// Wird von allen Unterklassen verwendet, die diese Methode nicht überschreiben.</span>
<span class="linenos" data-line="13"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Tier sagt nichts."</span><span class="p">);</span>
<span class="linenos" data-line="14"></span><span class="w"> </span><span class="p">}</span>
<span class="linenos" data-line="15"></span><span class="p">}</span>
<span class="linenos" data-line="16"></span>
<span class="linenos" data-line="17"></span><span class="cm">/**</span>
<span class="linenos" data-line="18"></span><span class="cm"> * Deklariert die Klasse "Hund" als Unterklasse der Klasse "Tier".</span>
<span class="linenos" data-line="19"></span><span class="cm"> * Die Klasse "Hund" erbt damit die Felder und Methoden der Klasse "Tier".</span>
<span class="linenos" data-line="20"></span><span class="cm"> */</span>
<span class="linenos" data-line="21"></span><span class="kd">class</span> <span class="nc">Hund</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Tier</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="22"></span><span class="w"> </span><span class="cm">/**</span>
<span class="linenos" data-line="23"></span><span class="cm"> * Diese Methode ist in der Oberklasse "Tier" implementiert. Sie wird</span>
<span class="linenos" data-line="24"></span><span class="cm"> * in dieser Klasse überschrieben und für die Tierart "Hund" angepasst.</span>
<span class="linenos" data-line="25"></span><span class="cm"> */</span>
<span class="linenos" data-line="26"></span><span class="w"> </span><span class="nd">@Override</span>
<span class="linenos" data-line="27"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">kommuniziere</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="28"></span><span class="w"> </span><span class="c1">// Ruft die Implementierung dieser Methode in der Oberklasse "Tier" auf.</span>
<span class="linenos" data-line="29"></span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">kommuniziere</span><span class="p">();</span>
<span class="linenos" data-line="30"></span><span class="w"> </span><span class="c1">// Gibt einen Text in der Konsole aus.</span>
<span class="linenos" data-line="31"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hund sagt: 'Wuff Wuff'"</span><span class="p">);</span>
<span class="linenos" data-line="32"></span><span class="w"> </span><span class="p">}</span>
<span class="linenos" data-line="33"></span><span class="p">}</span>
<span class="linenos" data-line="34"></span>
<span class="linenos" data-line="35"></span><span class="cm">/**</span>
<span class="linenos" data-line="36"></span><span class="cm"> * Deklariert die Klasse "Katze" als Unterklasse der Klasse "Tier".</span>
<span class="linenos" data-line="37"></span><span class="cm"> * Die Klasse "Katze" erbt damit die Felder und Methoden der Klasse "Tier".</span>
<span class="linenos" data-line="38"></span><span class="cm"> */</span>
<span class="linenos" data-line="39"></span><span class="kd">class</span> <span class="nc">Katze</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Tier</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="40"></span><span class="w"> </span><span class="cm">/**</span>
<span class="linenos" data-line="41"></span><span class="cm"> * Diese Methode ist in der Oberklasse "Tier" implementiert. Sie wird</span>
<span class="linenos" data-line="42"></span><span class="cm"> * in dieser Klasse überschrieben und für die Tierart "Katze" angepasst.</span>
<span class="linenos" data-line="43"></span><span class="cm"> */</span>
<span class="linenos" data-line="44"></span><span class="w"> </span><span class="nd">@Override</span>
<span class="linenos" data-line="45"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">kommuniziere</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="46"></span><span class="w"> </span><span class="c1">// Ruft die Implementierung dieser Methode in der Oberklasse "Tier" auf.</span>
<span class="linenos" data-line="47"></span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">kommuniziere</span><span class="p">();</span>
<span class="linenos" data-line="48"></span><span class="w"> </span><span class="c1">// Gibt einen Text auf der Konsole aus.</span>
<span class="linenos" data-line="49"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Katze sagt: 'Miau'"</span><span class="p">);</span>
<span class="linenos" data-line="50"></span><span class="w"> </span><span class="p">}</span>
<span class="linenos" data-line="51"></span><span class="p">}</span>
<span class="linenos" data-line="52"></span>
<span class="linenos" data-line="53"></span><span class="kd">class</span> <span class="nc">Main</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="54"></span><span class="w"> </span><span class="cm">/**</span>
<span class="linenos" data-line="55"></span><span class="cm"> * Methode, die beim Programmstart aufgerufen wird.</span>
<span class="linenos" data-line="56"></span><span class="cm"> */</span>
<span class="linenos" data-line="57"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="58"></span><span class="w"> </span><span class="c1">// Deklariert eine Variable für Instanzen der Klassen "Hund" und "Katze"</span>
<span class="linenos" data-line="59"></span><span class="w"> </span><span class="n">Tier</span><span class="w"> </span><span class="n">tier</span><span class="p">;</span>
<span class="linenos" data-line="60"></span>
<span class="linenos" data-line="61"></span><span class="w"> </span><span class="c1">// Erstellt eine Instanz der Klasse "Hund" und speichert die Instanz in</span>
<span class="linenos" data-line="62"></span><span class="w"> </span><span class="c1">// der Variable "tier"</span>
<span class="linenos" data-line="63"></span><span class="w"> </span><span class="n">tier</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Hund</span><span class="p">();</span>
<span class="linenos" data-line="64"></span><span class="w"> </span><span class="c1">// Ruft die Methode Hund.kommuniziere() auf</span>
<span class="linenos" data-line="65"></span><span class="w"> </span><span class="n">tier</span><span class="p">.</span><span class="na">kommuniziere</span><span class="p">();</span>
<span class="linenos" data-line="66"></span>
<span class="linenos" data-line="67"></span><span class="w"> </span><span class="c1">// Erstellt eine Instanz der Klasse "Katze" und speichert die Instanz in</span>
<span class="linenos" data-line="68"></span><span class="w"> </span><span class="c1">// der Variable "tier"</span>
<span class="linenos" data-line="69"></span><span class="w"> </span><span class="n">tier</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Katze</span><span class="p">();</span>
<span class="linenos" data-line="70"></span><span class="w"> </span><span class="c1">// Ruft die Methode Katze.kommuniziere() auf</span>
<span class="linenos" data-line="71"></span><span class="w"> </span><span class="n">tier</span><span class="p">.</span><span class="na">kommuniziere</span><span class="p">();</span>
<span class="linenos" data-line="72"></span><span class="w"> </span><span class="p">}</span>
<span class="linenos" data-line="73"></span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Konsolenausgabe">Konsolenausgabe</h5></div>
<div class="mw-highlight mw-highlight-lang-console mw-content-ltr" dir="ltr"><pre><span></span><span class="go">Tier sagt nichts.</span>
<span class="go">Hund sagt: 'Wuff Wuff'</span>
<span class="go">Tier sagt nichts.</span>
<span class="go">Katze sagt: 'Miau'</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Reflexion">Reflexion</h3></div>
<p>Java bietet eine <a href="Reflexion_(Programmierung)" title="Reflexion (Programmierung)">Reflexion</a>-API als Bestandteil der <a href="Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitumgebung</a>. Damit ist es möglich, zur Laufzeit auf Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprägung zur Zeit der Programmerstellung nicht bekannt war. Häufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster <a href="Fabrikmethode" title="Fabrikmethode">Fabrikmethode</a> (<i>Factory Method</i>) angewandt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Annotationen">Annotationen</h3></div>
<p>Mit Java 5 hat Sun die Programmiersprache um <a href="Annotation_(Java)" title="Annotation (Java)">Annotationen</a> erweitert. Annotationen erlauben die Notation von <a href="Metadaten" title="Metadaten">Metadaten</a> und ermöglichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen. Sinn der Annotationen ist unter anderem die automatische Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dokumenten für wiederkehrende Muster anhand möglichst kurzer Hinweise im Quelltext. Bislang wurden in Java dafür ausschließlich <a href="Javadoc" title="Javadoc">Javadoc</a>-Kommentare mit speziellen JavaDoc-Tags verwendet, die von <a href="Doclet" title="Doclet">Doclets</a> wie zum Beispiel dem <a href="XDoclet" title="XDoclet">XDoclet</a> ausgewertet wurden.
</p><p>Annotationen können auch in den kompilierten Class-Dateien enthalten sein. Der Quelltext wird also für ihre Verwendung nicht benötigt. Insbesondere sind die Annotationen auch über die Reflection-API zugänglich. So können sie zum Beispiel zur Erweiterung des <a href="JavaBeans" title="JavaBeans">Bean-Konzeptes</a> verwendet werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Modulare_Ausführung_auf_fernen_Computern"><span id="Modulare_Ausf.C3.BChrung_auf_fernen_Computern"></span>Modulare Ausführung auf fernen Computern</h3></div>
<p>Java bietet die Möglichkeit, Klassen zu schreiben, die in unterschiedlichen Ausführungsumgebungen ablaufen. Beispielsweise lassen sich <a href="Java-Applet" title="Java-Applet">Applets</a> in Webbrowsern, die Java unterstützen, ausführen. Das Sicherheitskonzept von Java kann dazu eingesetzt werden, dass unbekannte Klassen dabei keinen Schaden anrichten können, was vor allem bei <a href="Java-Applet" title="Java-Applet">Applets</a> wichtig ist (siehe auch <a href="Sandbox" title="Sandbox">Sandbox</a>). Beispiele für in entsprechenden Ausführungsumgebungen ausführbare Java-Module sind <a href="Java-Applet" title="Java-Applet">Applets</a>, <a href="Servlet" class="mw-redirect" title="Servlet">Servlets</a>, <a href="Portlet" title="Portlet">Portlets</a>, <a href="MIDlet" title="MIDlet">MIDlets</a>, Xlets, <a href="Translet" title="Translet">Translets</a>, und <a href="Enterprise_JavaBeans" class="mw-redirect" title="Enterprise JavaBeans">Enterprise JavaBeans</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Merkmale">Merkmale</h2></div>

<p>Der Objektzugriff in Java ist <a href="Java_Virtual_Machine" title="Java Virtual Machine">VM</a>-intern über <a href="Referenz_(Programmierung)" title="Referenz (Programmierung)">Referenzen</a> implementiert, die den aus C oder C++ bekannten <a href="Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeigern</a> ähneln.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Die Sprachdefinition (Java Language Specification) bezeichnet sie als „Reference Values“ um deutlich zu machen, dass sie im <a href="Quelltext" title="Quelltext">Quelltext</a> des jeweiligen Programms als <a href="Call_by_value" class="mw-redirect" title="Call by value">Call by value</a> übergeben werden.<sup id="cite_ref-sun-reference-value_15-0" class="reference"><a href="#cite_note-sun-reference-value-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> Aus Sicherheitsgründen erlauben diese nicht, die tatsächliche Speicheradresse zu erkennen oder zu modifizieren. Sogenannte <a href="Zeiger_(Informatik)#Zeigerarithmetik" title="Zeiger (Informatik)">Zeigerarithmetik</a> ist in Java somit ausgeschlossen. Per Design kann so ein häufiger Typ von Fehlern, die in anderen Programmiersprachen auftreten, von vornherein ausgeschlossen werden.
</p><p>Zusammengehörige Klassen werden in Paketen (englisch <i>packages</i>) zusammengefasst. Diese Pakete ermöglichen die Einschränkung der Sichtbarkeit von Klassen, eine Strukturierung von größeren Projekten sowie eine Trennung des Namensraums für verschiedene Entwickler. Die Paketnamen sind hierarchisch aufgebaut und beginnen meist mit dem (umgekehrten) Internet-Domainnamen des Entwicklers, also beispielsweise <i>com.google</i> bei Klassenbibliotheken, die <a href="Google_LLC" title="Google LLC">Google</a> zur Verfügung stellt. Klassennamen müssen nur innerhalb eines Paketes eindeutig sein. Hierdurch ist es möglich, Klassen von verschiedenen Entwicklern zu kombinieren, ohne dass es zu Namenskonflikten kommt. Die Hierarchie der Paketnamen hat allerdings keine <a href="Semantik" title="Semantik">semantische</a> Bedeutung. Bei der Sichtbarkeit zwischen den Klassen zweier Pakete spielt es keine Rolle, wo sich die Pakete in der Namenshierarchie befinden. Klassen sind entweder nur für Klassen des eigenen Paketes sichtbar oder für alle Pakete.
</p><p>Weiter unterstützt die Sprache <a href="Thread_(Informatik)" title="Thread (Informatik)">Threads</a> (<a href="Nebenl%C3%A4ufigkeit" title="Nebenläufigkeit">nebenläufig</a> ablaufende Programmteile) und <a href="Ausnahmebehandlung" title="Ausnahmebehandlung">Ausnahmen</a> (englisch <i>exception</i>). Java beinhaltet auch eine <a href="Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">automatische Speicherbereinigung</a> (englisch <i>garbage collector</i>), die nicht (mehr) referenzierte Objekte aus dem Speicher entfernt.
</p><p>Java unterscheidet explizit zwischen <a href="Schnittstelle_(Objektorientierung)" title="Schnittstelle (Objektorientierung)">Schnittstellen</a> und <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a>. Eine Klasse kann beliebig viele Schnittstellen implementieren, hat aber stets genau eine <a href="Basisklasse" title="Basisklasse">Basisklasse</a>. Java unterstützt kein direktes Erben von mehreren Klassen („<a href="Mehrfachvererbung" title="Mehrfachvererbung">Mehrfachvererbung</a>“), jedoch die Vererbung über mehrere Hierarchie-Ebenen (Klasse <i>Kind</i> erbt von Klasse <i>Vater</i>, die ihrerseits von Klasse <i>Großvater</i> erbt usw.). Je nach <a href="Java-Syntax#Reservierte_Wörter" title="Java-Syntax">Sichtbarkeit</a> (<code>public</code>, <code>protected</code>, <i>default</i>/<i>package-private</i>, <code>private</code>) erbt die Klasse <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methoden</a> und Attribute (auch Felder genannt) von ihren Klassenvorfahren. Alle Klassen sind – direkt oder indirekt – von der Wurzelklasse <code>Object</code> abgeleitet.
</p><p>Zu Java gehört eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom zugrundeliegenden Betriebssystem unabhängige <a href="Programmierschnittstelle" title="Programmierschnittstelle">Schnittstelle</a> (Application programming interface, API) angeboten.
</p><p>Mit Java 2 wurden die Java Foundation Classes (JFC) eingeführt, die unter anderem <a href="Swing_(Java)" title="Swing (Java)">Swing</a> bereitstellen, das zur Erzeugung plattformunabhängiger <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">grafischer Benutzerschnittstellen</a> (GUI) dient und auf dem <a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a> basiert.
</p>
<div class="mw-heading mw-heading2"><h2 id="Syntax">Syntax</h2></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Java-Syntax" title="Java-Syntax">Java-Syntax</a></i></div>
<p><a href="Syntax" title="Syntax">Syntax</a>/<a href="Formale_Grammatik" title="Formale Grammatik">Grammatik</a> und <a href="Formale_Semantik" title="Formale Semantik">Semantik</a> von Java sind in der <a href="Java_Language_Specification" title="Java Language Specification">Java Language Specification</a> (Java-Sprachspezifikation) von <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> dokumentiert. Das folgende Beispielprogramm gibt die unter Programmierern klassische Meldung „Hallo Welt!“, gefolgt von einem Zeilenumbruch, auf dem Ausgabemedium aus.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HalloWelt</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hallo Welt!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Entstehung_und_Weiterentwicklung">Entstehung und Weiterentwicklung</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Entstehung">Entstehung</h3></div>
<p>Herkunft und Entwicklung der Programmiersprache Java sowie mit ihr verwandter Technik sind im Artikel <a href="Java-Technologie#Geschichte" title="Java-Technologie">Java-Technologie</a> beschrieben sowie wann welche Version veröffentlicht wurde.
</p>
<div class="mw-heading mw-heading3"><h3 id="Oracle_und_JCP">Oracle und JCP</h3></div>
<p>Neben Oracle kümmert sich eine Vielzahl von Einzelpersonen, kleiner und großer Unternehmen, wie <a href="Apple" title="Apple">Apple</a>, <a href="IBM" title="IBM">IBM</a>, <a href="Hewlett-Packard" class="mw-redirect" title="Hewlett-Packard">Hewlett-Packard</a> und <a href="Siemens" title="Siemens">Siemens</a> beim <a href="Java_Community_Process" title="Java Community Process">Java Community Process</a> (JCP) unter anderem um die Weiterentwicklung der Java-Sprachspezifikation. Der JCP wurde 1998 von Sun Microsystems ins Leben gerufen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Java_als_freie_Software">Java als freie Software</h3></div>
<p>Sun hatte zugesichert, sein <a href="Java_Development_Kit" title="Java Development Kit">JDK</a> unter der <a href="GNU_General_Public_License" title="GNU General Public License">GNU General Public License</a> zu veröffentlichen; mit der Übernahme durch Oracle wurde auch die offene Lizenzierung übernommen. Am 13. November 2006 wurden bereits mit dem Compiler javac und der <a href="Hotspot-Optimierung" class="mw-redirect" title="Hotspot-Optimierung">Hotspot Virtual Machine</a> erste Teile als <a href="Open_Source" title="Open Source">Open Source</a> veröffentlicht. Zudem wurde mit <a href="OpenJDK" title="OpenJDK">OpenJDK</a> eine Community-Seite eröffnet, mit deren Hilfe die Entwicklung koordiniert werden soll.<sup id="cite_ref-OpenJDK_16-0" class="reference"><a href="#cite_note-OpenJDK-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Am 8. Mai 2007 folgten dann große Teile des „Java-SE“-Quellcodes zum Erstellen eines JDK. Eine Ausnahme stellte solcher Code dar, für den Sun nicht die nötigen Rechte besaß, um ihn freizugeben. Dieser liegt somit nur in kompilierter Form vor.<sup id="cite_ref-Ankündigung_von_Sun_17-0" class="reference"><a href="#cite_note-Ankündigung_von_Sun-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> Ebenfalls kündigte Sun an, dass Entwicklungen auf Grundlage des OpenJDK das „Java Compatible“-Logo führen dürfen, wenn sie nach dem „Java Compatibility Kit“ (JCK) zertifiziert sind.
</p><p>Zuvor wurde der Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermöglichte so zwar Einsicht, er durfte aber nicht beliebig modifiziert werden. Deswegen gibt es neben den offiziellen JCP auch diverse unabhängige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter eine freie Open-Source-Lizenz gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte waren <a href="Apache_Harmony" title="Apache Harmony">Apache Harmony</a>, <a href="Kaffe" title="Kaffe">Kaffe</a> und das <a href="GNU_Classpath" title="GNU Classpath">GNU-Classpath-Projekt</a>. Gegenwärtig gibt es neben OpenJDK noch eine weitere große Implementierung, die aktuelle Java Releases veröffentlicht, <a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse</a> OpenJ9. Diese JVM-Implementierung wurde von IBM an die <a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a> übergeben.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> OpenJ9 steht mehrfachlizenziert unter <a href="Eclipse_Public_License" title="Eclipse Public License">EPL 2.0</a>, <a href="Apache-Lizenz" title="Apache-Lizenz">Apache 2.0</a> und <a href="GNU_General_Public_License" title="GNU General Public License">GNU 2.0</a> <a href="GPL_linking_exception" title="GPL linking exception">with Classpath Exception</a>.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Unterschiede_zu_ähnlichen_Sprachen"><span id="Unterschiede_zu_.C3.A4hnlichen_Sprachen"></span>Unterschiede zu ähnlichen Sprachen</h2></div>
<p>Darüber hinaus bietet Java die Möglichkeit, aus Java-Code heraus verschiedene Skriptsprachen auszuführen. Ebenfalls gibt es eine Reihe an Programmiersprachen, die nach Java-Bytecode kompiliert werden. Damit lassen sich Programmteile auch in anderen Programmiersprachen umsetzen.
Mit JDK Version 7, das am 28. Juli 2011 erschienen ist,<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> wurde auch die Unterstützung für dynamische „Fremdsprachen“ durch die Virtual Machine verbessert.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="JavaScript">JavaScript</h3></div>
<p>Java darf nicht mit der <a href="Skriptsprache" title="Skriptsprache">Skriptsprache</a> <a href="JavaScript" title="JavaScript">JavaScript</a> verwechselt werden. JavaScript wurde von <a href="Netscape_Communications" title="Netscape Communications">Netscape Communications</a> entwickelt, hieß früher LiveScript und wurde im Zuge einer Kooperation zwischen Netscape und Sun Microsystems in JavaScript umbenannt.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
</p><p>JavaScript ist eine <a href="Dynamische_Typisierung" title="Dynamische Typisierung">dynamisch typisierte</a>, objektbasierte, aber, bis <a href="JavaScript#Versionsgeschichte_von_ECMAScript_(ECMA-262)" title="JavaScript">ECMAScript 2015</a>, klassenlose Skriptsprache mit einer ähnlichen <a href="Syntax" title="Syntax">Syntax</a> wie C, <a href="Perl_(Programmiersprache)" title="Perl (Programmiersprache)">Perl</a> oder Java, unterscheidet sich jedoch in vielerlei Hinsicht von Java. Trotz der Ähnlichkeit der Namen der beiden Programmiersprachen unterscheidet sich Java stärker von JavaScript als zum Beispiel von C++ oder C#. JavaScript wurde ursprünglich vornehmlich in <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Seiten zur eingebetteten Programmierung verwendet, um interaktive Webapplikationen zu ermöglichen. Mittlerweile wird JavaScript auf der Laufzeitumgebung <a href="Node.js" title="Node.js">Node.js</a> zunehmend auch für Server-Applikationen genutzt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Smalltalk">Smalltalk</h3></div>
<p><a href="Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a> ist eine der ältesten objektorientierten Programmiersprachen überhaupt. Java erbt von Smalltalk die grundsätzliche Konzeption eines Klassenbaumes, in den alle Klassen eingehängt werden. Dabei stammen alle Klassen entweder direkt oder indirekt von der Klasse <code>java.lang.Object</code> ab. Außerdem wurden die Konzepte der <a href="Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">automatischen Speicherbereinigung</a> <i>(garbage collector)</i> und der <a href="Virtuelle_Maschine" title="Virtuelle Maschine">virtuellen Maschine</a> übernommen sowie eine Vielzahl weiterer Merkmale der Sprache Smalltalk.
</p><p>Smalltalk kennt jedoch keine primitiven Datentypen wie zum Beispiel <code>int</code> – selbst eine einfache Zahl ist ein Objekt. Dieses Konzept wurde nicht nach Java übernommen, primitive Datentypen werden aber ab Java 5 mittels <a href="Autoboxing" class="mw-redirect" title="Autoboxing">Autoboxing</a> bei Bedarf in die entsprechenden Objekttypen und umgekehrt umgewandelt.<sup id="cite_ref-Autoboxing_13-1" class="reference"><a href="#cite_note-Autoboxing-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="C++"><span id="C.2B.2B"></span>C++</h3></div>
<p>Java lehnt seine Syntax an die der Programmiersprache <a href="C%2B%2B" title="C++">C++</a> an. Im Gegensatz zu C++ fanden jedoch Mehrfachvererbung oder <a href="Zeigerarithmetik" class="mw-redirect" title="Zeigerarithmetik">Zeigerarithmetik</a> keinen Einzug. Klassen können nur eine Superklasse haben (Einfachvererbung), aber eine beliebige Anzahl von Interfaces implementieren. Interfaces entsprechen abstrakten Klassen in C++, die keine Attribute oder konkrete Methoden besitzen, werden allerdings konzeptionell anders als die auch in Java möglichen abstrakten Klassen verwendet. Die interne Speicherverwaltung wird dem Java-Entwickler weitgehend abgenommen; dies erledigt die <a href="Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">automatische Speicherbereinigung</a>. Allerdings garantiert auch dieser Mechanismus nicht den vollständigen Ausschluss von <a href="Speicherleck" title="Speicherleck">Speicherlecks</a>. Letztlich muss der Programmierer dafür sorgen, dass nicht mehr verwendete Objekte von keinem laufenden Thread mehr referenziert werden. Einander referenzierende Objekte, die von keinem Thread aus mehr über Referenzen erreichbar sind, werden ebenfalls freigegeben, wobei es dem <a href="Garbage_Collector" class="mw-redirect" title="Garbage Collector">Garbage Collector</a> (GC) obliegt, wann und ob überhaupt diese Objekte freigegeben werden. Jede Objektklasse besitzt zusätzlich eine Methode namens <code>finalize()</code>, die vom Garbage Collector aufgerufen werden kann, um zusätzliche „Aufräumarbeiten“ durchzuführen. Es gibt jedoch keine Garantie, wann und ob dies geschieht. Sie ist daher nicht mit einem Destruktor aus C++ vergleichbar.
</p><p>Neben Mehrfachvererbung und Speicherarithmetik wurden bei der Entwicklung von Java noch weitere Konstrukte der Sprache C++ bewusst weggelassen:
</p><p>Im Gegensatz zu C++ ist es in Java nicht möglich, Operatoren (zum Beispiel arithmetische Operatoren wie <code>+</code> und <code>-</code>, logische Operatoren wie <code>&amp;&amp;</code> und <code>||</code>, oder den Index-Operator <code>[]</code>) zu <a href="%C3%9Cberladen" title="Überladen">überladen</a>, das heißt in einem bestimmten Kontext mit neuer Bedeutung zu versehen. Dies sorgt einerseits für eine Vereinfachung der Sprache an sich und verhindert, dass Quellcodes mit Operatoren, die mit schwer nachvollziehbarer Semantik überladen werden, unleserlich gemacht werden. Andererseits würden benutzerdefinierte Typen mit überladenen Operatoren in C++ eher wie eingebaute Typen erscheinen können – vor allem numerischer Code wäre so mitunter einfacher nachzuvollziehen. Die Sprachdefinition von Java definiert jedoch typabhängiges Verhalten der Operatoren <code>+</code> (Addition bei arithmetischen Operanden, andernfalls zur Verkettung von Zeichenketten „string concatenation“) sowie <code>&amp;</code>, <code>|</code> und <code>^</code> (logisch für boolean und bitweise für arithmetische Operanden). Das lässt diese Operatoren zumindest wie teilweise überladene Operatoren erscheinen.
</p><p>Das C++-Konstrukt der <a href="Template_(C%2B%2B)" title="Template (C++)">Templates</a>, die es erlauben, Algorithmen oder sogar ganze Klassen unabhängig von den darin verwendeten Datentypen zu definieren, wurde in Java nicht übernommen. Ab Version 5 unterstützt Java aber sogenannte <a href="Generische_Programmierung_in_Java" title="Generische Programmierung in Java">Generics</a>, die zwar keinerlei <a href="C%2B%2B-Metaprogrammierung" title="C++-Metaprogrammierung">Metaprogrammierung</a> erlauben, aber ähnlich wie C++-Templates typsichere Container und ähnliches ermöglichen.
</p><p>In Java wurde das Schlüsselwort <code>const</code> reserviert, hat aber keine Funktion. Die Alternative zu <code>const</code> (und Präprozessor-Direktiven) ist <code>final</code>. Im Gegensatz zu <code>const</code> wird final in einer Methodensignatur nicht vererbt und hat somit nur im aktuellen Scope Gültigkeit. Den <code>final</code>-Modifikator kann eine Klasse (die dadurch nicht mehr abgeleitet werden kann), ein Attribut (dessen Wert so nur einmal gesetzt werden kann) oder eine Methode (die dadurch unüberschreibbar wird) besitzen.
</p>
<div class="mw-heading mw-heading3"><h3 id="C#_(.NET)"><span id="C.23_.28.NET.29"></span>C# (.NET)</h3></div>
<p>Die <a href=".NET_(Oberbegriff)" title=".NET (Oberbegriff)">.NET</a>-Plattform von <a href="Microsoft" title="Microsoft">Microsoft</a> kann als Konkurrenzprodukt zu Java gesehen werden. Mit der Spezifikation von <a href="C-Sharp" title="C-Sharp">C#</a> hat Microsoft im Rahmen seiner .NET-Strategie versucht, den Spagat zwischen der Schaffung einer neuen Sprache und der leichten Integration bestehender Komponenten zu schaffen.
</p><p>Konzeptionelle Unterschiede zu Java bestehen insbesondere in der Umsetzung von Callback-Mechanismen. In .NET ist hierzu die Unterstützung von <i><a href="Delegation_(Softwareentwicklung)" title="Delegation (Softwareentwicklung)">Delegaten</a></i> (englisch <i>delegates</i>) implementiert, einem Konzept, das mit Funktionszeigern vergleichbar ist. In Java kann dies über Methodenreferenzen oder Lambdaausdrücke erreicht werden.
</p><p>Des Weiteren unterstützen .NET-Sprachen sogenannte Attribute (<i>attributes</i>), die es erlauben, die Funktionalität der Sprache über Metadaten im Code zu erweitern (eine ähnliche Funktionalität wurde in Form der oben beschriebenen <i>Annotations</i> in Java 5.0 übernommen).
C# enthält auch Bestandteile der Sprache <a href="Visual_Basic_.NET" title="Visual Basic .NET">Visual Basic</a>, zum Beispiel Eigenschaften (<i>properties</i>), sowie Konzepte aus C++.
</p><p>In .NET ist es ebenso wie in Java möglich, Ausnahmen (<i>exceptions</i>) zu einer Methode zu deklarieren. In Java können Ausnahmen so deklariert werden, dass sie auch verarbeitet werden müssen (<i><a href="Ausnahmebehandlung#Checked_Exceptions" title="Ausnahmebehandlung">Checked Exception</a></i>).
</p><p>Windows Systembefehle (Win-<a href="Bin%C3%A4rschnittstelle" title="Binärschnittstelle">ABI</a>-Aufrufe) können in .NET über <i>platform invoke</i> oder mittels C++/CLI aufgerufen werden. Das ist in Java nicht möglich, es besteht mit dem <a href="Java_Native_Interface" title="Java Native Interface">Java Native Interface</a> aber die Möglichkeit, C- und C++-Code per DLL direkt zu referenzieren und außerhalb der <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> ausführen zu lassen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Scala">Scala</h3></div>
<p><a href="Scala_(Programmiersprache)" title="Scala (Programmiersprache)">Scala</a> ist eine Programmiersprache, die objektorientierte und funktionale Paradigmen vereint und wie Java auf der <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> ausgeführt werden kann.
</p><p>Im Gegensatz zu Java, und ähnlich wie C#, ist das Typsystem vereinheitlicht und umfasst Referenz- und Werttypen. Benutzer können weitere Typen definieren – in Java sind die verfügbaren Werttypen auf die fest vordefinierten primitiven Typen (<code>int</code>, <code>long</code>, …) beschränkt.
</p><p>Scala verwendet statt Schnittstellen (<code>interface</code>) sogenannte Traits (<code>traits</code>), die wiederverwendbare Methodenimplementierungen enthalten können.
Weitere Funktionalität, die nicht in Java enthalten ist, umfasst unter anderem Typen und <a href="Funktion_h%C3%B6herer_Ordnung" title="Funktion höherer Ordnung">Funktionen höherer Ordnung</a>, <a href="Pattern_Matching" title="Pattern Matching">Pattern Matching</a> und frei wählbare Methoden- und Klassennamen.
</p><p>Wie in C# gibt es keine <i>checked exceptions</i>. Allerdings können Methoden mit einer <code>@throws</code>-Annotation versehen werden. Scala entfernt unter anderem das Konzept statischer Methoden und Klassen (ersetzt durch <i>companion objects</i>), <i>Raw Types</i>, die Notwendigkeit von Getter- und Settermethoden und die unsichere Varianz von Arrays.
</p><p>Die Varianz generischer Typen muss nicht wie in Java bei der Nutzung erfolgen (<i>use-site variance</i>), sondern kann direkt bei der Deklaration angegeben werden (<i>declaration-site variance</i>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Kotlin">Kotlin</h3></div>
<p><a href="Kotlin_(Programmiersprache)" title="Kotlin (Programmiersprache)">Kotlin</a> ist eine <a href="Plattformunabh%C3%A4ngigkeit" title="Plattformunabhängigkeit">plattformübergreifende</a>, <a href="Statische_Typisierung" title="Statische Typisierung">statisch typisierte</a> <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a>, die in <a href="Bytecode" title="Bytecode">Bytecode</a> für die <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> (JVM) übersetzt wird, aber auch in <a href="JavaScript" title="JavaScript">JavaScript</a>-<a href="Quelltext" title="Quelltext">Quellcode</a> oder (mittels <a href="LLVM" title="LLVM">LLVM</a>) in <a href="Maschinensprache" title="Maschinensprache">Maschinencode</a> umgewandelt werden kann.
</p><p>Anders als in Java wird bei Kotlin der <a href="Datentyp" title="Datentyp">Datentyp</a> einer <a href="Variable_(Programmierung)" title="Variable (Programmierung)">Variable</a> nicht vor dem Variablennamen, sondern danach, abgetrennt durch einen Doppelpunkt, notiert. Allerdings unterstützt Kotlin auch <a href="Typinferenz" title="Typinferenz">Typinferenz</a>, sodass der Typ oft auch weggelassen werden kann, wenn er aus dem Zusammenhang klar ist. Als Anweisungsende genügt der Zeilenumbruch, optional kann jedoch auch ein Semikolon verwendet werden.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> Zusätzlich zu <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a> und <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methoden</a> (in Kotlin: <i>member functions</i>) aus der <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten Programmierung</a> unterstützt Kotlin <a href="Prozedurale_Programmierung" title="Prozedurale Programmierung">prozedurale Programmierung</a> unter Verwendung von <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> sowie bestimmte Aspekte der <a href="Funktionale_Programmierung" title="Funktionale Programmierung">funktionalen Programmierung</a>.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> Als Einstiegspunkt dient wie bei <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> u.&nbsp;ä. eine <a href="Main-Funktion" class="mw-redirect" title="Main-Funktion">main-Funktion</a>.
</p><p>Kotlin lässt sich außerdem zur Entwicklung von <a href="Android_(Betriebssystem)" title="Android (Betriebssystem)">Android-Apps</a> verwenden und wird dafür seit 2017 offiziell von <a href="Google_LLC" title="Google LLC">Google</a> unterstützt.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> Seit Mai 2019 ist Kotlin die von Google bevorzugte Sprache für Android-Appentwicklung.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Anwendungsarten">Anwendungsarten</h2></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Java-Anwendung" title="Java-Anwendung">Java-Anwendung</a></i></div>
<p>Mit Java können zahlreiche verschiedene Arten von Anwendungen erstellt werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Java-Webanwendungen">Java-Webanwendungen</h3></div>
<p>Java-Webanwendungen sind Java-Programme, die auf einem Webserver geladen und gestartet werden und beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. Üblicherweise läuft ein Teil der Webanwendung auf dem Server (die <a href="Gesch%C3%A4ftslogik" title="Geschäftslogik">Geschäftslogik</a> und <a href="Persistenz_(Informatik)" title="Persistenz (Informatik)">Persistenz</a>) und ein anderer Teil am Webbrowser (die Logik der <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">grafischen Benutzeroberfläche</a>). Der Serverteil wird üblicherweise vollständig in Java geschrieben, der Browserteil üblicherweise in HTML und JavaScript. Es ist jedoch auch möglich, Java-Webanwendungen inklusive GUI-Logik vollständig in Java zu schreiben (siehe z.&nbsp;B. <a href="Google_Web_Toolkit" title="Google Web Toolkit">Google Web Toolkit</a> oder die <a href="Remote_Application_Platform" title="Remote Application Platform">Remote Application Platform</a>). Bekannte Beispiele für Java-Webanwendungen sind <a href="Twitter" class="mw-redirect" title="Twitter">Twitter</a>,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> <a href="Jira_(Software)" title="Jira (Software)">Jira</a>, <a href="Jenkins_(Software)" title="Jenkins (Software)">Jenkins</a> oder <a href="Gmail" title="Gmail">Gmail</a> (das nicht vollständig, aber zu großen Teilen in Java geschrieben ist).
</p>
<div class="mw-heading mw-heading3"><h3 id="Java-Desktop-Anwendungen">Java-Desktop-Anwendungen</h3></div>
<p>Unter Desktop-Anwendungen oder Applikationen werden normale Desktop-Programme zusammengefasst. Sowohl Internet-Kommunikationsprogramme als auch Spiele oder Office-Anwendungen, die auf einem normalen PC laufen, werden so genannt. Bekannte Beispiele für Java-Desktop-Anwendungen sind die <a href="Integrierte_Entwicklungsumgebung" title="Integrierte Entwicklungsumgebung">integrierte Entwicklungsumgebung</a> <a href="Eclipse_(IDE)" title="Eclipse (IDE)">Eclipse</a>, das <a href="Filesharing" title="Filesharing">Filesharing</a>-Programm <a href="Vuze" title="Vuze">Vuze</a> oder das <a href="Computerspiel" title="Computerspiel">Computerspiel</a> <a href="Minecraft" title="Minecraft">Minecraft</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Java-Applets">Java-Applets</h3></div>
<p><a href="Java-Applet" title="Java-Applet">Java-Applets</a> sind Java-Anwendungen, die normalerweise in einem <a href="Webbrowser" title="Webbrowser">Webbrowser</a> ausgeführt werden. Sie sind üblicherweise auf einen durch ein spezielles <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Tag definierten Bereich einer Webseite beschränkt. Voraussetzung für die Ausführung von Java-Applets ist ein Java-fähiger Browser. Diese Anwendungsform wird seit Java 11 nicht mehr unterstützt, nachdem sie bereits in Java 9 als „veraltet“ gekennzeichnet wurde.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Apps">Apps</h3></div>
<p>Apps sind kleinere Applikationen für mobile Geräte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen üblicherweise auf speziellen, für die Ausführung von Java-Anwendungen auf mobilen Geräten optimierten Java-Plattformen wie <a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a>.
</p><p><a href="Mobile_App" title="Mobile App">Apps</a> für das <a href="Android_(Betriebssystem)" title="Android (Betriebssystem)">Android-Betriebssystem</a> von <a href="Google_Inc." class="mw-redirect" title="Google Inc.">Google</a> werden in der hier beschriebenen Sprache Java programmiert, basieren aber auf einer abweichenden <a href="Klassenbibliothek" class="mw-redirect" title="Klassenbibliothek">Klassenbibliotheks</a>-<a href="Programmierschnittstelle" title="Programmierschnittstelle">API</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Entwicklungsumgebungen">Entwicklungsumgebungen</h2></div>
<p>Es gibt eine große Vielfalt von <a href="Integrierte_Entwicklungsumgebung" title="Integrierte Entwicklungsumgebung">Entwicklungsumgebungen</a> für Java, sowohl proprietäre als auch freie (<a href="Open_Source" title="Open Source">Open Source</a>). Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben.
</p><p>Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte <a href="Eclipse_(IDE)" title="Eclipse (IDE)">Eclipse</a> und das von Sun entwickelte <a href="NetBeans_IDE" title="NetBeans IDE">NetBeans</a>.
</p><p>Unter den kommerziellen Entwicklungsumgebungen sind <a href="IntelliJ_IDEA" title="IntelliJ IDEA">IntelliJ IDEA</a> von <a href="JetBrains" title="JetBrains">JetBrains</a> (welches in der Community Edition<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> jedoch <a href="Freie_Software" title="Freie Software">Freie Software</a> ist), <a href="JBuilder" title="JBuilder">JBuilder</a> von <a href="Borland" title="Borland">Borland</a> sowie <a href="JCreator" title="JCreator">JCreator</a> und das auf <a href="NetBeans_IDE" title="NetBeans IDE">NetBeans</a> basierende Sun ONE Studio von Sun, am verbreitetsten. Außerdem gibt es noch eine um einige hundert Plugins erweiterte Version von Eclipse, die von <a href="IBM" title="IBM">IBM</a> unter dem Namen <a href="WebSphere" title="WebSphere">WebSphere Studio Application Developer</a> („WSAD“) vertrieben wurde und ab Version 6.0 <a href="Rational_Application_Developer" title="Rational Application Developer">Rational Application Developer</a> („RAD“) heißt.
</p><p>Apple liefert mit <a href="MacOS" title="MacOS">macOS</a> ab Version 10.3 die Entwicklungsumgebung <a href="Xcode" title="Xcode">Xcode</a> aus, die verschiedene Programmiersprachen unterstützt, allerdings einen Schwerpunkt auf C, C++, Objective-C und Swift setzt.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
Für das Programmieren von Android-Apps mit Java empfiehlt sich <a href="Android_Studio" title="Android Studio">Android Studio</a>.
</p><p>Für Einsteiger und Ausbildungszwecke konzipiert ist die IDE <a href="BlueJ" title="BlueJ">BlueJ</a>, wo unter anderem die Beziehungen zwischen den verschiedenen Klassen grafisch in Form von <a href="Klassendiagramm" title="Klassendiagramm">Klassendiagrammen</a> dargestellt werden.
</p><p>Sehr viele <a href="Texteditor" title="Texteditor">Texteditoren</a> bieten Unterstützung für Java, darunter <a href="Emacs" title="Emacs">Emacs</a>, <a href="JEdit" title="JEdit">jEdit</a>, <a href="Atom_(Texteditor)" title="Atom (Texteditor)">Atom</a>, <a href="Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a>, <a href="Vim" title="Vim">Vim</a>, <a href="Geany" title="Geany">Geany</a>, <a href="Jed" title="Jed">Jed</a>, <a href="Notepad%2B%2B" title="Notepad++">Notepad++</a> und <a href="TextPad" title="TextPad">TextPad</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Compiler">Compiler</h2></div>
<p>Ein Java-<a href="Compiler" title="Compiler">Compiler</a> übersetzt Java-<a href="Quelltext" title="Quelltext">Quellcode</a> (Dateiendung „.java“) in einen ausführbaren Code. Grundsätzlich unterscheidet man zwischen Bytecode- und <a href="Maschinensprache" title="Maschinensprache">Nativecode</a>-Compilern. Einige <a href="Java-Laufzeitumgebung" title="Java-Laufzeitumgebung">Java-Laufzeitumgebungen</a> verwenden einen <a href="JIT-Compiler" class="mw-redirect" title="JIT-Compiler">JIT-Compiler</a>, um zur Laufzeit den Bytecode häufig genutzter Programmteile in nativen <a href="Maschinensprache" title="Maschinensprache">Maschinencode</a> zu übersetzen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Bytecode-Compiler">Bytecode-Compiler</h3></div>
<p>Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren <a href="Bytecode" title="Bytecode">Bytecode</a> (Dateiendung „.class“), den die Java Runtime Environment (JRE) später ausführt. Die aktuelle <a href="HotSpot" title="HotSpot">HotSpot</a>-Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, sodass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein Nachfolger der Just-in-time-Kompilierung ist, dazu, dass Java-Bytecode theoretisch genauso schnell wie native, kompilierte Programme ausgeführt werden könnte.
</p><p>Die HotSpot-Technik ist seit der JRE Version 1.3 verfügbar und wurde seitdem stetig weiter verbessert.
</p><p>Beispiele für Bytecode-Compiler sind <a href="Java_Development_Kit#Java-Compiler" title="Java Development Kit">javac</a> (Teil des <a href="Java_Development_Kit" title="Java Development Kit">JDK</a>) und war <a href="Jikes" title="Jikes">Jikes</a> (eingestellt, Funktionsumfang bis Java SE 5) von <a href="IBM" title="IBM">IBM</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Native_Compiler">Native Compiler</h3></div>
<p>Es existieren auch Compiler für Java, die Java-Quelltexte oder Java-Bytecode in „normalen“ <a href="Maschinensprache" title="Maschinensprache">Maschinencode</a> übersetzen können, sogenannte <a href="Ahead-of-time-Compiler" title="Ahead-of-time-Compiler">Ahead-of-time-Compiler</a>. Nativ kompilierte Programme haben den Vorteil, keine <a href="JavaVM" class="mw-redirect" title="JavaVM">JavaVM</a> mehr zu benötigen, aber auch den Nachteil, nicht mehr plattformunabhängig zu sein.
</p><p>Beispiele für native Java-Compiler waren <a href="Excelsior_JET" title="Excelsior JET">Excelsior JET</a> (eingestellt, bis Java SE 7), sowie <a href="GNU_Compiler_for_Java" title="GNU Compiler for Java">GNU Compiler for Java</a> (GCJ, eingestellt, bis J2SE 5.0) wie <a href="MinGW" title="MinGW">MinGW</a>, <a href="Cygwin" title="Cygwin">Cygwin</a> oder JavaNativeCompiler (JNC).
</p>
<div class="mw-heading mw-heading3"><h3 id="Wrapper">Wrapper</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Wrapper_(Software)" title="Wrapper (Software)">Wrapper (Software)</a></i></div>
<p>Als weitere Möglichkeit kann das Java-Programm in ein anderes Programm „eingepackt“ (englisch <i><span lang="en">to wrap</span></i>) werden; diese äußere Hülle dient dann als Ersatz für ein <a href="Java-Archiv" class="mw-redirect" title="Java-Archiv">Java-Archiv</a>. Sie sucht selbständig nach einer installierten <a href="JavaVM" class="mw-redirect" title="JavaVM">Java-Laufzeitumgebung</a>, um das eigentliche Programm zu starten, und informiert den Benutzer darüber, wo er eine <a href="Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitumgebung</a> herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung nötig, um das Programm starten zu können, aber der Anwender erhält eine verständliche Fehlermeldung, die ihm weiterhilft.
</p><p><a href="Java_Web_Start" title="Java Web Start">Java Web Start</a> ist ein etwas eleganterer und standardisierter Ansatz für diese Lösung – er ermöglicht die einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass immer die neueste Version der Anwendung ausgeführt wird. Dadurch werden komplizierte Installations- oder Aktualisierungsprozeduren automatisiert.
</p><p>Beispiele für Java-Wrapper sind <a href="JSmooth" title="JSmooth">JSmooth</a> oder Launch4J. <a href="JBuilder" title="JBuilder">JBuilder</a> von <a href="Borland" title="Borland">Borland</a> und <a href="Nullsoft_Scriptable_Install_System" title="Nullsoft Scriptable Install System">NSIS</a> sind ebenfalls in der Lage, einen Wrapper für Windows zu erstellen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Java_User_Groups">Java User Groups</h2></div>
<p>Sowohl international als auch in Deutschland gibt es Java User Groups (JUG). Der Zweck dieser Vereinigungen an Java-Anwendern ist freier Informationsaustausch.
</p>
<div class="mw-heading mw-heading2"><h2 id="Konferenzen">Konferenzen</h2></div>
<p>Wichtige deutschsprachige Konferenzen rund um Java sind:
</p>
<ul><li><a href="JAX_(Konferenz)" title="JAX (Konferenz)">JAX</a></li>
<li><a href="Java-Tage" class="mw-redirect" title="Java-Tage">Java-Tage</a></li>
<li><a href="JavaLand" class="mw-redirect" title="JavaLand">JavaLand</a></li></ul>
<p>Internationale Konferenzen mit dem Schwerpunkt Java:
</p>
<ul><li><a href="JavaOne" title="JavaOne">JavaOne</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Trivia">Trivia</h2></div>
<p>Mit <i>Helloworld.java</i> veröffentlichte die Band <a href="Nanowar_of_Steel" title="Nanowar of Steel">Nanowar of Steel</a> 2024 einen Song in der <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> Java.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Visual_J%2B%2B" title="Visual J++">Visual J++</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Christian Ullenboom: <a rel="nofollow" class="external text" href="http://openbook.galileocomputing.de/javainsel/"><i>Java ist auch eine Insel</i>.</a> Galileo Computing, 13. Auflage 2017, ISBN 978-3-8362-4119-9.</li>
<li>Guido Krüger, Heiko Hansen: <a rel="nofollow" class="external text" href="http://www.javabuch.de/"><i>Java-Programmierung. Das Handbuch zu Java 8</i>.</a> O’Reilly, 8. Auflage 2014, ISBN 978-3-95561-514-7.</li>
<li>Christian Ullenboom: <a rel="nofollow" class="external text" href="http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2253"><i>Java 7 – Mehr als eine Insel</i>.</a> Galileo Computing, 1. Auflage 2011, ISBN 978-3-8362-1507-7.</li>
<li>Florian Siebler: <a rel="nofollow" class="external text" href="http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2411"><i>Einführung in Java mit BlueJ</i>.</a> Galileo Computing, 1. Auflage 2011, ISBN 978-3-8362-1630-2.</li>
<li>Dirk Louis, Peter Müller: <i>Java 7 – Das Handbuch</i>, Markt &amp; Technik, 1. Auflage 2011, ISBN 978-3-8272-4353-9.</li>
<li><a href="James_Gosling" title="James Gosling">James Gosling</a>, <a href="Bill_Joy" title="Bill Joy">Bill Joy</a>, <a href="Guy_Steele" class="mw-redirect" title="Guy Steele">Guy Steele</a>, Gilad Bracha: <i>The Java Language Specification</i>, Addison-Wesley, 3. Auflage 2005, ISBN 0-321-24678-0, (<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/">Online</a>).</li>
<li>Michael Bonacina: <i>Java Programmieren für Einsteiger</i>, BMU Verlag, 2. Auflage 2018, ISBN 978-3-96645-003-4.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noresize noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Commons"></span></span></div><b><span class=""><a class="external text" href="https://commons.wikimedia.org/wiki/Category:Java_(programming_language)?uselang=de"><span lang="en">Commons</span>: Java (programming language)</a></span></b>&nbsp;– Sammlung von Bildern, Videos und Audiodateien</div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wikibooks"></span></span></div><b><a href="https://de.wikibooks.org/wiki/Java_Standard" class="extiw external" title="b:Java Standard">Wikibooks: Java</a></b>&nbsp;– Lern- und Lehrmaterialien</div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wikiversity"></span></span></div><b><a href="https://de.wikiversity.org/wiki/Kurs:Programmierung_in_Java" class="extiw external" title="v:Kurs:Programmierung in Java">Wikiversity: Java (Programmiersprache)</a></b>&nbsp;– Kursmaterialien</div>
<ul><li><a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/">Java</a> bei Oracle (englisch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-_b5582dc99bf534f6-1"><span class="mw-cite-backlink"><a href="#cite_ref-_b5582dc99bf534f6_1-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/"><cite style="font-style:italic">www.oracle.com</cite>.</a></span>
</li>
<li id="cite_note-_90999754ca016858-2"><span class="mw-cite-backlink"><a href="#cite_ref-_90999754ca016858_2-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/25/"><cite style="font-style:italic"><span lang="en">JDK 25</span></cite>.</a></span>
</li>
<li id="cite_note-_42b71f7a64a76d21-3"><span class="mw-cite-backlink"><a href="#cite_ref-_42b71f7a64a76d21_3-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.lemondeinformatique.fr/actualites/lire-java-open-source-c-est-fait-et-c-est-en-gpl-21350.html"><cite style="font-style:italic">www.lemondeinformatique.fr</cite>.</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20250107040901/https://www.tiobe.com/tiobe-index/"><i>TIOBE Programming Community Index.</i></a> tiobe.com, 7.&nbsp;Januar 2025,<span class="Abrufdatum"> abgerufen am 7.&nbsp;Januar 2025</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=TIOBE+Programming+Community+Index&amp;rft.description=TIOBE+Programming+Community+Index&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20250107040901%2Fhttps%3A%2F%2Fwww.tiobe.com%2Ftiobe-index%2F&amp;rft.publisher=tiobe.com&amp;rft.date=2025-01-07&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite">Rachel Stephens: <a rel="nofollow" class="external text" href="https://redmonk.com/rstephens/2025/06/18/top20-jan2025/"><i>RedMonk Top 20 Languages Over Time: January 2025.</i></a> In: <i>tecosystems.</i> RedMonk, 18.&nbsp;Juni 2025,<span class="Abrufdatum"> abgerufen am 17.&nbsp;September 2025</span> (amerikanisches Englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=RedMonk+Top+20+Languages+Over+Time%3A+January+2025&amp;rft.description=RedMonk+Top+20+Languages+Over+Time%3A+January+2025&amp;rft.identifier=https%3A%2F%2Fredmonk.com%2Frstephens%2F2025%2F06%2F18%2Ftop20-jan2025%2F&amp;rft.creator=Rachel+Stephens&amp;rft.publisher=RedMonk&amp;rft.date=2025-06-18&amp;rft.language=en-US">&nbsp;</span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><span class="cite">Silke Hahn: <a rel="nofollow" class="external text" href="https://www.heise.de/news/Python-schreibt-Geschichte-Platz-2-im-Programmiersprachen-Ranking-4673726.html"><i>Python schreibt Geschichte: Platz 2 im Programmiersprachen-Ranking.</i></a> heise online, 3.&nbsp;März 2020,<span class="Abrufdatum"> abgerufen am 5.&nbsp;März 2020</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Python+schreibt+Geschichte%3A+Platz+2+im+Programmiersprachen-Ranking&amp;rft.description=Python+schreibt+Geschichte%3A+Platz+2+im+Programmiersprachen-Ranking&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Fnews%2FPython-schreibt-Geschichte-Platz-2-im-Programmiersprachen-Ranking-4673726.html&amp;rft.creator=Silke+Hahn&amp;rft.publisher=heise+online&amp;rft.date=2020-03-03&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://java.sun.com/docs/overviews/java/java-overview-1.html"><i>The Java Language: An Overview.</i></a> 1995 Sun Whitepaper</span>
</li>
<li id="cite_note-Schulz-8"><span class="mw-cite-backlink"><a href="#cite_ref-Schulz_8-0">↑</a></span> <span class="reference-text">
Hajo Schulz: <cite style="font-style:italic">Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest</cite>. Teil 1. In: <cite style="font-style:italic"><a href="C%E2%80%99t" title="C’t">c’t</a></cite>. <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>19</span>. Heise Zeitschriften Verlag, Hannover 2003, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>204–207</span> (<a rel="nofollow" class="external text" href="https://shop.heise.de/katalog/daniel-dusentrieb">heise.de</a> [abgerufen am 21.&nbsp;Oktober 2010]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Java+%28Programmiersprache%29&amp;rft.atitle=Daniel+D%C3%BCsentrieb%2C+C%23%2C+Java%2C+C%2B%2B+und+Delphi+im+Effizienztest&amp;rft.au=Hajo+Schulz&amp;rft.date=2003&amp;rft.genre=journal&amp;rft.issue=19&amp;rft.jtitle=c%E2%80%99t&amp;rft.pages=204-207&amp;rft.place=Hannover&amp;rft.pub=Heise+Zeitschriften+Verlag" style="display:none">&nbsp;</span><br>
Hajo Schulz: <cite style="font-style:italic">Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest</cite>. Teil 2. In: <cite style="font-style:italic"><a href="C%E2%80%99t" title="C’t">c’t</a></cite>. <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>21</span>. Heise Zeitschriften Verlag, Hannover 2003, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>222–227</span> (<a rel="nofollow" class="external text" href="https://shop.heise.de/katalog/daniel-dusentrieb-1">heise.de</a> [abgerufen am 21.&nbsp;Oktober 2010]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Java+%28Programmiersprache%29&amp;rft.atitle=Daniel+D%C3%BCsentrieb%2C+C%23%2C+Java%2C+C%2B%2B+und+Delphi+im+Effizienztest&amp;rft.au=Hajo+Schulz&amp;rft.date=2003&amp;rft.genre=journal&amp;rft.issue=21&amp;rft.jtitle=c%E2%80%99t&amp;rft.pages=222-227&amp;rft.place=Hannover&amp;rft.pub=Heise+Zeitschriften+Verlag" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-Speed2-9"><span class="mw-cite-backlink"><a href="#cite_ref-Speed2_9-0">↑</a></span> <span class="reference-text"><span class="cite">J.P.Lewis, Ulrich Neumann: <a rel="nofollow" class="external text" href="http://scribblethink.org/Computer/javaCbenchmark.html"><i>Java pulling ahead?</i></a> Performance of Java versus C++. Computer Graphics and Immersive Technology Lab, University of Southern California, Januar 2003,<span class="Abrufdatum"> abgerufen am 21.&nbsp;Oktober 2010</span> (englisch): „This article surveys a number of benchmarks and finds that Java performance on numerical code is comparable to that of C++, with hints that Java’s relative performance is continuing to improve.“</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Java+pulling+ahead%3F&amp;rft.description=Java+pulling+ahead%3F&amp;rft.identifier=http%3A%2F%2Fscribblethink.org%2FComputer%2FjavaCbenchmark.html&amp;rft.creator=J.P.Lewis%2C+Ulrich+Neumann&amp;rft.publisher=Computer+Graphics+and+Immersive+Technology+Lab%2C+University+of+Southern+California&amp;rft.date=2003-01&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-hundt2011-10"><span class="mw-cite-backlink"><a href="#cite_ref-hundt2011_10-0">↑</a></span> <span class="reference-text">Robert Hundt: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Loop Recognition in C++/Java/Go/Scala</cite>. Hrsg.: Scala Days 2011. Stanford CA 27.&nbsp;April 2011 (englisch, <a rel="nofollow" class="external text" href="https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf">scala-lang.org</a> [PDF; <span style="white-space:nowrap">318<span style="display:inline-block;width:.2em">&nbsp;</span>kB</span>; abgerufen am 17.&nbsp;November 2012]): <span class="lang" lang="en" dir="auto"><i>We find that in regards to performance, C++ wins out by a large margin. […] The Java version was probably the simplest to implement, but the hardest to analyze for performance. Specifically the effects around garbage collection were complicated and very hard to tune</i></span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Java+%28Programmiersprache%29&amp;rft.au=Robert+Hundt&amp;rft.btitle=Loop+Recognition+in+C%2B%2B%2FJava%2FGo%2FScala&amp;rft.date=2011-04-27&amp;rft.genre=book&amp;rft.place=Stanford+CA" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-Performance1-11"><span class="mw-cite-backlink"><a href="#cite_ref-Performance1_11-0">↑</a></span> <span class="reference-text"><span class="cite">David Georg Reichelt: <a rel="nofollow" class="external text" href="https://www.informatik-aktuell.de/entwicklung/methoden/performance-regressionen-fruehzeitig-erkennen-und-vermeiden.html"><i>Java pulling ahead?</i></a> JVM Performance-Regressionen frühzeitig erkennen und vermeiden. Informatik Aktuell, Alkmene Verlag, 4.&nbsp;Februar 2022,<span class="Abrufdatum"> abgerufen am 6.&nbsp;Februar 2022</span>: „Im JVM-Umfeld ist vor allem JMH zur Definition von Benchmarks verbreitet. Die regelmäßige Ausführung von JMH-Benchmarks wird aus Ressourcengründen aber nur selten durchgeführt. Statt immer alle Regressions-Benchmarks oder -Tests auszuführen, ist es viel schneller, nur diejenigen auszuführen, bei denen eine Regression möglich ist. Daher ermöglicht das Jenkins-Plugin Peass-CI die Automatisierung der Regressions-Testselektion für JMH, so dass in der aktuellen Version nur noch für diese Version relevante Workloads getestet werden.“</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Java+pulling+ahead%3F&amp;rft.description=Java+pulling+ahead%3F&amp;rft.identifier=https%3A%2F%2Fwww.informatik-aktuell.de%2Fentwicklung%2Fmethoden%2Fperformance-regressionen-fruehzeitig-erkennen-und-vermeiden.html&amp;rft.creator=David+Georg+Reichelt&amp;rft.publisher=Informatik+Aktuell%2C+Alkmene+Verlag&amp;rft.date=2022-02-04&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text">C. A. R. Hoare: <a rel="nofollow" class="external text" href="https://www.docdroid.net/U0ZHsOJ/hoare1974-pdf"><i>Monitors: an operating system structuring concept</i>.</a> (PDF) In: <i>Communications of the ACM</i>, 17, Nr.&nbsp;10, 1974, S.&nbsp;549–557 <a href="https://doi.org/10.1145/355620.361161" class="extiw external" title="doi:10.1145/355620.361161">doi:10.1145/355620.361161</a></span>
</li>
<li id="cite_note-Autoboxing-13"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-Autoboxing_13-0">a</a></sup> <sup><a href="#cite_ref-Autoboxing_13-1">b</a></sup></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://download.oracle.com/javase/7/docs/technotes/guides/language/autoboxing.html">Autoboxing in Java</a> (englisch)</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text"><span class="cite">Scott Stanchfield: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080515170930/http://javadude.com/articles/passbyvalue.htm"><i>Java is Pass-by-Value, Dammit!</i></a> JavaDude.com, archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fjavadude.com%2Farticles%2Fpassbyvalue.htm">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">15.&nbsp;Mai 2008</span><span>;</span><span class="Abrufdatum"> abgerufen am 5.&nbsp;November 2010</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Java+is+Pass-by-Value%2C+Dammit%21&amp;rft.description=Java+is+Pass-by-Value%2C+Dammit%21&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20080515170930%2Fhttp%3A%2F%2Fjavadude.com%2Farticles%2Fpassbyvalue.htm&amp;rft.creator=Scott+Stanchfield&amp;rft.publisher=JavaDude.com&amp;rft.source=http://javadude.com/articles/passbyvalue.htm&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-sun-reference-value-15"><span class="mw-cite-backlink"><a href="#cite_ref-sun-reference-value_15-0">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.1"><i>4.1. The Kinds of Types and Values.</i></a> In: <i>Java Language Specification.</i> Oracle Inc.,<span class="Abrufdatum"> abgerufen am 24.&nbsp;September 2016</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=4.1.+The+Kinds+of+Types+and+Values&amp;rft.description=4.1.+The+Kinds+of+Types+and+Values&amp;rft.identifier=https%3A%2F%2Fdocs.oracle.com%2Fjavase%2Fspecs%2Fjls%2Fse8%2Fhtml%2Fjls-4.html%23jls-4.1&amp;rft.publisher=Oracle+Inc.&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-OpenJDK-16"><span class="mw-cite-backlink"><a href="#cite_ref-OpenJDK_16-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://openjdk.java.net/">Community-Seite zur Entwicklung des Open-Source-JDKs von Sun</a></span>
</li>
<li id="cite_note-Ankündigung_von_Sun-17"><span class="mw-cite-backlink"><a href="#cite_ref-Ankündigung_von_Sun_17-0">↑</a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */


.mw-parser-output .webarchiv-memento a{color:inherit}


/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080511090905/http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml">Sun Microsystems Presseankündigung vom 8. Mai 2007</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 11. Mai 2008 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) (englisch)</span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.heise.de/developer/meldung/Java-IBM-uebertraegt-die-JVM-J9-an-die-Eclipse-Foundation-3834823.html"><i>Java: IBM überträgt die JVM J9 an die Eclipse Foundation.</i></a> In: <i>heise online.</i><span class="Abrufdatum"> Abgerufen am 24.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Java%3A+IBM+%C3%BCbertr%C3%A4gt+die+JVM+J9+an+die+Eclipse+Foundation&amp;rft.description=Java%3A+IBM+%C3%BCbertr%C3%A4gt+die+JVM+J9+an+die+Eclipse+Foundation&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fmeldung%2FJava-IBM-uebertraegt-die-JVM-J9-an-die-Eclipse-Foundation-3834823.html&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><a href="#cite_ref-19">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://github.com/eclipse/openj9"><i>eclipse openj9 license.</i></a> Eclipse Foundation, 1.&nbsp;August 2018,<span class="Abrufdatum"> abgerufen am 24.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=eclipse+openj9+license&amp;rft.description=eclipse+openj9+license&amp;rft.identifier=https%3A%2F%2Fgithub.com%2Feclipse%2Fopenj9&amp;rft.publisher=Eclipse+Foundation&amp;rft.date=2018-08-01">&nbsp;</span></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><a href="#cite_ref-20">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080406145016/http://openjdk.java.net/projects/jdk7/"><i>JDK 7.</i></a> 6.&nbsp;April 2008, archiviert vom <span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fopenjdk.java.net%2Fprojects%2Fjdk7%2F">Original</a></span><span>;</span><span class="Abrufdatum"> abgerufen am 18.&nbsp;Januar 2025</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=JDK+7&amp;rft.description=JDK+7&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20080406145016%2Fhttp%3A%2F%2Fopenjdk.java.net%2Fprojects%2Fjdk7%2F&amp;rft.date=2008-04-06&amp;rft.source=http://openjdk.java.net/projects/jdk7/">&nbsp;</span></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><a href="#cite_ref-21">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://openjdk.java.net/projects/jdk7/features/#f353"><i>JDK 7 Features – JSR 292: VM support for non-Java languages (InvokeDynamic)</i></a> (englisch)</span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><a href="#cite_ref-22">↑</a></span> <span class="reference-text">Brendan Eich: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070528020012/http://www.mozilla.org/js/language/ICFP-Keynote.ppt"><i>JavaScript at Ten Years</i></a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 28. Mai 2007 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) (<a href="Microsoft_PowerPoint" title="Microsoft PowerPoint">MS PowerPoint</a>; 576&nbsp;kB).</span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><a href="#cite_ref-23">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://confluence.jetbrains.com/display/Kotlin/Grammar#Grammar-Semicolons"><i>Semicolons.</i></a> jetbrains.com,<span class="Abrufdatum"> abgerufen am 8.&nbsp;Februar 2014</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Semicolons&amp;rft.description=Semicolons&amp;rft.identifier=&amp;rft.publisher=jetbrains.com&amp;rft.date=&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><a href="#cite_ref-24">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://confluence.jetbrains.com/display/Kotlin/Functions"><i>functions.</i></a> jetbrains.com,<span class="Abrufdatum"> abgerufen am 8.&nbsp;Februar 2014</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=functions&amp;rft.description=functions&amp;rft.identifier=&amp;rft.publisher=jetbrains.com&amp;rft.date=&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><a href="#cite_ref-25">↑</a></span> <span class="reference-text"><span class="cite">Maxim Shafirov: <a rel="nofollow" class="external text" href="https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/"><i>Kotlin on Android. Now official.</i></a> In: <i>Kotlin Blog.</i> 17.&nbsp;Mai 2017,<span class="Abrufdatum"> abgerufen am 18.&nbsp;Juni 2019</span> (amerikanisches Englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Kotlin+on+Android.+Now+official&amp;rft.description=Kotlin+on+Android.+Now+official&amp;rft.identifier=https%3A%2F%2Fblog.jetbrains.com%2Fkotlin%2F2017%2F05%2Fkotlin-on-android-now-official%2F&amp;rft.creator=Maxim+Shafirov&amp;rft.date=2017-05-17&amp;rft.language=en-US">&nbsp;</span></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><a href="#cite_ref-26">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.heise.de/developer/meldung/I-O-2019-Googles-Bekenntnis-zu-Kotlin-4417060.html"><i>Google I/O: Googles Bekenntnis zu Kotlin.</i></a> In: <i><a href="Heise_online" title="Heise online">heise online</a>.</i><span class="Abrufdatum"> Abgerufen am 18.&nbsp;Juni 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Google+I%2FO%3A+Googles+Bekenntnis+zu+Kotlin&amp;rft.description=Google+I%2FO%3A+Googles+Bekenntnis+zu+Kotlin&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fmeldung%2FI-O-2019-Googles-Bekenntnis-zu-Kotlin-4417060.html&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><a href="#cite_ref-27">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20210202124108/https://developer.ibm.com/languages/java/tutorials/deploy-java-app-that-analyzes-tweets/"><i>IBM Developer.</i></a> Archiviert vom <span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=https%3A%2F%2Fdeveloper.ibm.com%2Flanguages%2Fjava%2Ftutorials%2Fdeploy-java-app-that-analyzes-tweets%2F">Original</a></span><span>;</span><span class="Abrufdatum"> abgerufen am 18.&nbsp;Januar 2025</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=IBM+Developer&amp;rft.description=IBM+Developer&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20210202124108%2Fhttps%3A%2F%2Fdeveloper.ibm.com%2Flanguages%2Fjava%2Ftutorials%2Fdeploy-java-app-that-analyzes-tweets%2F&amp;rft.source=https://developer.ibm.com/languages/java/tutorials/deploy-java-app-that-analyzes-tweets/">&nbsp;</span></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><a href="#cite_ref-28">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.oracle.com/technetwork/java/javase/9-deprecated-features-3745636.html"><i>Deprecated APIs, Features, and Options.</i></a><span class="Abrufdatum"> Abgerufen am 14.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Deprecated+APIs%2C+Features%2C+and+Options&amp;rft.description=Deprecated+APIs%2C+Features%2C+and+Options&amp;rft.identifier=https%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2F9-deprecated-features-3745636.html">&nbsp;</span></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><a href="#cite_ref-29">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://openjdk.java.net/jeps/289"><i>JEP 289: Deprecate the Applet API.</i></a><span class="Abrufdatum"> Abgerufen am 14.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=JEP+289%3A+Deprecate+the+Applet+API&amp;rft.description=JEP+289%3A+Deprecate+the+Applet+API&amp;rft.identifier=http%3A%2F%2Fopenjdk.java.net%2Fjeps%2F289">&nbsp;</span></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><a href="#cite_ref-30">↑</a></span> <span class="reference-text"><span class="cite">Dalibor Topic: <a rel="nofollow" class="external text" href="https://blogs.oracle.com/java-platform-group/moving-to-a-plugin-free-web"><i>Moving to a Plugin-Free Web.</i></a><span class="Abrufdatum"> Abgerufen am 14.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Moving+to+a+Plugin-Free+Web&amp;rft.description=Moving+to+a+Plugin-Free+Web&amp;rft.identifier=https%3A%2F%2Fblogs.oracle.com%2Fjava-platform-group%2Fmoving-to-a-plugin-free-web&amp;rft.creator=Dalibor+Topic">&nbsp;</span></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><a href="#cite_ref-31">↑</a></span> <span class="reference-text"><span class="cite">Aurelio Garcia-Ribeyro: <a rel="nofollow" class="external text" href="https://blogs.oracle.com/java-platform-group/further-updates-to-moving-to-a-plugin-free-web"><i>Further Updates to 'Moving to a Plugin-Free Web'.</i></a><span class="Abrufdatum"> Abgerufen am 14.&nbsp;September 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Further+Updates+to+%27Moving+to+a+Plugin-Free+Web%27&amp;rft.description=Further+Updates+to+%27Moving+to+a+Plugin-Free+Web%27&amp;rft.identifier=https%3A%2F%2Fblogs.oracle.com%2Fjava-platform-group%2Ffurther-updates-to-moving-to-a-plugin-free-web&amp;rft.creator=Aurelio+Garcia-Ribeyro">&nbsp;</span></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><a href="#cite_ref-32">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/JetBrains/intellij-community">JetBrains Community Edition</a> auf <a href="GitHub" title="GitHub">GitHub</a></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><a href="#cite_ref-33">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://developer.apple.com/xcode/"><i>Xcode.</i></a><span class="Abrufdatum"> Abgerufen am 18.&nbsp;Januar 2025</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Xcode&amp;rft.description=Xcode&amp;rft.identifier=https%3A%2F%2Fdeveloper.apple.com%2Fxcode%2F&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><a href="#cite_ref-34">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://developer.apple.com/swift/resources/"><i>Swift Resources - Apple Developer.</i></a><span class="Abrufdatum"> Abgerufen am 18.&nbsp;Januar 2025</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Swift+Resources+-+Apple+Developer&amp;rft.description=Swift+Resources+-+Apple+Developer&amp;rft.identifier=https%3A%2F%2Fdeveloper.apple.com%2Fswift%2Fresources%2F&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><a href="#cite_ref-35">↑</a></span> <span class="reference-text"><span class="cite">Emanuel Kessler: <a rel="nofollow" class="external text" href="https://www.golem.de/news/nanowar-of-steel-java-code-zum-mit-singen-2412-191915.html"><i>Nanowar of Steel: Java-Code zum (Mit-)Singen - Golem.de.</i></a> In: <i><a href="Golem.de" class="mw-redirect" title="Golem.de">Golem.de</a>.</i> 20.&nbsp;Dezember 2024,<span class="Abrufdatum"> abgerufen am 18.&nbsp;Januar 2025</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=Nanowar+of+Steel%3A+Java-Code+zum+%28Mit-%29Singen+-+Golem.de&amp;rft.description=Nanowar+of+Steel%3A+Java-Code+zum+%28Mit-%29Singen+-+Golem.de&amp;rft.identifier=https%3A%2F%2Fwww.golem.de%2Fnews%2Fnanowar-of-steel-java-code-zum-mit-singen-2412-191915.html&amp;rft.creator=Emanuel+Kessler&amp;rft.date=2024-12-20">&nbsp;</span></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><a href="#cite_ref-36">↑</a></span> <span class="reference-text"><span class="cite">Napalm Records: <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=yup8gIXxWDU"><i>NANOWAR OF STEEL - HelloWorld.java (Source Code Video) | Napalm Records.</i></a> 3.&nbsp;Dezember 2024,<span class="Abrufdatum"> abgerufen am 18.&nbsp;Januar 2025</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+%28Programmiersprache%29&amp;rft.title=NANOWAR+OF+STEEL+-+HelloWorld.java+%28Source+Code+Video%29+%7C+Napalm+Records&amp;rft.description=NANOWAR+OF+STEEL+-+HelloWorld.java+%28Source+Code+Video%29+%7C+Napalm+Records&amp;rft.identifier=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dyup8gIXxWDU&amp;rft.creator=Napalm+Records&amp;rft.date=2024-12-03">&nbsp;</span></span>
</li>
</ol>

<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten">
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Normdaten&nbsp;(Sachbegriff): <a href="Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4401313-9">4401313-9</a></span> | <a href="Library_of_Congress_Control_Number" title="Library of Congress Control Number">LCCN</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh95008574">sh95008574</a></span> </div>
</div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-09-22" href="https://de.wikipedia.org/wiki/?title=Java_(Programmiersprache)&amp;oldid=259948493">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>